#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=60;
char b[N][N];
int n,m;
int g=0;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int st[N][N]; 
bool init()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(b[i][j]=='B')
			{
				for(int k=0;k<4;k++)
				{
					int xx=i+dx[k],yy=j+dy[k];
					if(b[xx][yy]=='B') continue;
					if(b[xx][yy]=='G') return false;
					b[xx][yy]='#';
				}
			}
		}
	}
	return true;
}

void reinit()
{
	for(int i=0;i<=n+1;i++)
	{
		for(int j=0;j<=m+1;j++)
		{
			st[i][j]=0;
			b[i][j]=0;
		}
	} 
}

void bfs()
{
	queue<pii> q;
	if(b[n][m]!='#') q.push({n,m});
	while(q.size())
	{
		int x=q.front().first;
		int y=q.front().second;
		q.pop();
		for(int i=0;i<4;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if(xx<1 || xx>n) continue;
			if(yy<1 || yy>m) continue;
			if(b[xx][yy]=='#') continue;
			if(st[xx][yy]) continue;
			st[xx][yy]=1;
			q.push({xx,yy});
		}
	}
}

bool check()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(b[i][j]=='G' && !st[i][j]) return false;
		}
	}
	return true;
}

void solve()
{
	cin>>n>>m;
	getchar();
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			scanf("%c",&b[i][j]);
		}
		getchar();
	}
	if(init()) 
	{
		bfs();
	}
	else
	{
		reinit();
		cout<<"no"<<endl;
		return;
	}
	
	if(check())
	{
		cout<<"yes"<<endl;
	}
	else cout<<"no"<<endl; 
	reinit();
}

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}

	return 0;
}

